package client;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import game.Game;

/**
 * Panel panel qui permet d'afficher les informations 
 * d'une partie tel que son nom, son createur, le nombre
 * de joueurs presents sur le nombre possible, son status
 * et le bouton permettant de joindre la partie
 * 
 * Remarque : Le contructeur sans parametres, permet
 * d'obtenir un panel des titres d'informations alors
 * que le constucteur avec parametre permet d'obtenir
 * un panel avec les informations de la partie
 * 
 * @author David Fassler
 * @version 1.0
 */
public class JPanelGameInfo extends JPanel {

	private static final long serialVersionUID = -6087242322253156795L;
	
	/**
	 *  Dimensions du panel d'information
	 */
	public static int WIDTH = 400;		
	/**
	 *  Dimensions du panel d'information
	 */
	public static int HEIGHT = 25;
	private static Dimension dimGameInfo = new Dimension(WIDTH, HEIGHT);
	
	// Contenu du label d'information
	private JLabel lblGameName;	
	private JLabel lblGameCreator;
	private JLabel lblNbPlayersRatio;
	private JLabel lblStatus;
	private JButton btnJoin;
	
	/**
	 * Application client pour communiquer avec le serveur
	 */
	private ClientApplication clientApp;
	
	/**
	 * Jeu lie a cette ligne d'infos
	 */
	private Game game;
	
	
	/**
	 * Constructeur
	 * Permet d'obtenir un panel contenant les titres
	 */
	public JPanelGameInfo(){
		setPreferredSize(dimGameInfo);
		setLayout(new FlowLayout(FlowLayout.LEFT,0,1));
		lblGameName = new JLabel("Nom");
		lblGameName.setPreferredSize(new Dimension(80, HEIGHT));
		
		lblGameCreator = new JLabel("Createur");
		lblGameCreator.setPreferredSize(new Dimension(80, HEIGHT));
		
		lblNbPlayersRatio = new JLabel("Joueurs");
		lblNbPlayersRatio.setPreferredSize(new Dimension(80, HEIGHT));
		
		lblStatus = new  JLabel("Statut");
		lblStatus.setPreferredSize(new Dimension(80, HEIGHT));
		
		add(lblGameName);
		add(lblGameCreator);
		add(lblNbPlayersRatio);
		add(lblStatus);
		
	}
	
	/**
	 * Constructeur
	 * Permet d'obtenir un panel contenant les informations 
	 * d'une partie
	 * @param clientApp application cliente
	 * @param game		partie dont les infos seront affichee
	 */
	public JPanelGameInfo(ClientApplication clientApp, Game game){
		this();
		
		this.clientApp = clientApp;
		this.game = game;
		
		this.setBackground(Color.white);
	
		lblGameName.setText(game.getName());
		lblGameCreator.setText(game.getCreator());
		lblNbPlayersRatio.setText(game.getNbPLayers()+"/"+game.getNbPlayersMax());
		lblStatus.setText(game.getStatus().toString());
		
		if(game.getStatus() == Game.Status.BRIEFING && game.getNbPLayers() < game.getNbPlayersMax()){
			btnJoin = new JButton("Joindre");
			btnJoin.setPreferredSize(new Dimension(80, HEIGHT));
			
			btnJoin.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					// On joint la partie
					JPanelGameInfo.this.clientApp.internals.joinGame(
								JPanelGameInfo.this.game, 
								JPanelGameInfo.this.clientApp.internals.userName);
				}
			});	
			add(btnJoin);
		}
	}
}
